package com.example.common.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * TODO
 *
 * @author chenzhian
 * @version 0.1.0
 * @since 0.1.0
 */
@Configuration
public class DirectRabbitConfig {

  @Bean
  public Queue rabbitmqDemoDirectQueue() {
    /**
     * 1、name:    队列名称
     * 2、durable: 是否持久化
     * 3、exclusive: 是否独享、排外的。如果设置为true，定义为排他队列。则只有创建者可以使用此队列。也就是private私有的。
     * 4、autoDelete: 是否自动删除。也就是临时队列。当最后一个消费者断开连接后，会自动删除。
     * */
    return new Queue(RabbitMQConfig.RABBITMQ_DEMO_TOPIC, true, false, false);
  }

  @Bean
  public DirectExchange rabbitmqDemoDirectExchange() {
    //Direct交换机
    return new DirectExchange(RabbitMQConfig.RABBITMQ_DEMO_DIRECT_EXCHANGE, true, false);
  }

  /**
   * 把队列绑定到交换机
   */
  @Bean
  public Binding bindDirect() {
    //链式写法，绑定交换机和队列，并设置匹配键
    return BindingBuilder
        //绑定队列
        .bind(rabbitmqDemoDirectQueue())
        //到交换机
        .to(rabbitmqDemoDirectExchange())
        //并设置匹配键
        .with(RabbitMQConfig.RABBITMQ_DEMO_DIRECT_ROUTING);
  }
}
